【发布时间】:2021-05-18 17:02:14
【问题描述】:
- 下面的爬虫代码
df = pd.DataFrame(columns=['Name', 'Address', 'Contact'])
driver = webdriver.Chrome(ChromeDriverManager().install())
url = 'www.website.com'
driver.get(url)
for _ in range(200):
print('url, driver, window, driver.get INITIALIZED', 'DF created')
name = driver.find_elements_by_class_name('pflist-itemtitle')
address = driver.find_elements_by_class_name('pflist-address')
contact = driver.find_elements_by_css_selector("a[href*='tel:']")
print('variables to name, address, contact ASSIGNED')
#Get names into a list
name_list = []
for a in range(len(name)):
name_list.append(name[a].text)
print('name scraped')
address_list = []
for b in range(len(address)):
address_list.append(address[b].text)
print('Address scraped')
contact_list = []
for c in range(len(contact)):
contact_list.append(contact[c].text)
print('Contact scraped')
data_tuples = list(zip(name_list[0:], address_list[0:], contact_list[0:])) # everything is paired together
temp_df = pd.DataFrame(data_tuples, columns=['Name', 'Address', 'Contact']) #creates temporary dataframe of each tuple in the field_listingtype
df = df.append(temp_df)
print('Data stored in dataframe')
driver.find_element_by_tag_name('body').send_keys(Keys.END)
element = driver.find_element_by_partial_link_text('Next »')
print('Is the button enabled : ' + str(element.is_enabled()))
print('Is the button visible : ' + str(element.is_displayed()))
element.click()
print('Next is clicked')
print('Finished scraping')
需要抓取大约 200 页,格式相同。因此for循环。每个页面都有大约 70 张联系人卡片,包括姓名、地址、联系人。我让硒元素与这三个元素一起工作,我已经测试过了。当我测试两页时似乎还可以。现在,我让一切正常工作,一旦完成,它就成功地抓取了所有 200 页。我在网站上交叉引用了这些数字以及我在 DF 中得到的信息。显然,有些联系人卡片没有附加电话号码,python 将下一个可用号码附加到没有电话号码的联系人。因此,所有数字都没有移动,也不是为了正确接触。我怎样才能避免这种情况,通过某种“if”语句,当电话号码元素不可用时,它只是在电话号码列表中附加某种“不可用”字符串?
- 另一个问题。我注意到它有时会完全错过刮掉一两个联系人。会不会是它没有及时完成,因为这次页面加载速度比其他时候快?提前致谢。
【问题讨论】:
-
可以分享网址吗?也许
beautifulsoup的解决方案就足够了......
标签: python selenium web-scraping