写一个scrapy和selenium结合爬取的代码爬取淘宝
时间: 2023-12-29 21:04:42 浏览: 141
Scrapy基于selenium结合爬取淘宝的实例讲解
这里是一个使用Scrapy和Selenium结合爬取淘宝的简单示例代码:
```python
import scrapy
from scrapy.selector import Selector
from selenium import webdriver
from scrapy.http import HtmlResponse
from time import sleep
class TaobaoSpider(scrapy.Spider):
name = 'taobao'
allowed_domains = ['taobao.com']
start_urls = ['https://www.taobao.com/']
def __init__(self, *args, **kwargs):
super(TaobaoSpider, self).__init__(*args, **kwargs)
self.driver = webdriver.Chrome()
def parse(self, response):
self.driver.get(response.url)
sleep(3)
selector = Selector(text=self.driver.page_source)
search_input = selector.css("#q")
search_input.clear()
search_input.send_keys("手机")
btn = self.driver.find_element_by_css_selector('#J_TSearchForm > div.search-button > button')
btn.click()
sleep(3)
while True:
selector = Selector(text=self.driver.page_source)
goods = selector.css('.J_MouserOnverReq')
for good in goods:
title = good.css('.title a::text').extract_first()
price = good.css('.price strong::text').extract_first()
yield {
'title': title,
'price': price
}
next_page = self.driver.find_element_by_css_selector('.J_Ajax.next')
if 'disabled' in next_page.get_attribute('class'):
break
else:
next_page.click()
sleep(3)
self.driver.quit()
```
首先,我们需要在`__init__`方法中初始化Selenium的驱动程序。在`parse`方法中,我们使用Selenium模拟用户在淘宝搜索框中输入"手机",然后点击搜索按钮。接下来,我们使用Scrapy的选择器从页面源代码中提取商品的标题和价格,并将其作为字典返回。最后,我们使用Selenium查找下一页按钮,如果按钮没有被禁用,则点击它并等待页面加载。重复此过程,直到找到所有的商品。
需要注意的是,使用Selenium爬取数据的效率比纯粹使用Scrapy要慢得多。因此,如果可以,最好尝试避免使用Selenium来爬取数据。
阅读全文