爬虫学习之18:使用selenium和chrome-headerless爬取淘宝网商品信息(异步加载网页)

       登录淘宝网,使用F12键观察网页结构,会发现淘宝网也是异步加载网站。有时候通过逆向工程区爬取这类网站也不容易。这里使用selenium和chrome-headerless来爬取。网上有结合selenium和PlantomJS来爬取的,但是最新版的Selenium已经放弃对PlantomJS的支持,所以这里使用chrome-headerless,方法其实差不多,由于selenium可以模拟浏览器行为,所以对这类异步加载的网站爬取起来会更容易些。本实验模拟从浏览器登录淘宝,并搜索淘宝中的口红商品,抓取的内容包括口红的名称、链接、店铺、售价,购买人数和地址信息等,结果存储在MongoDB中。代码如下:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from lxml import etree
import time
import pymongo

client = pymongo.MongoClient('localhost',27017)
mydb = client['mydb']
taobao = mydb['taobao']
#driver  =webdriver.PhantomJS()
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(executable_path='E:/Pyhton_lib/chromedriver_win32/chromedriver.exe', chrome_options=chrome_options)
driver.maximize_window()

def get_info(url,page):
    page = page+1
    driver.get(url)
    driver.implicitly_wait(10)
    selector = etree.HTML(driver.page_source)
    infos = selector.xpath('//div[@class="item J_MouserOnverReq  "]')
    for info in infos:
        goods_url = infos[0].xpath('div[1]/div/div/a/@href')[0]
        #print("goods_url:%s" % (goods_url))
        goods = infos[0].xpath('div[1]/div/div/a/img/@alt')[0]
        print("goods:%s" % (goods))
        price = infos[0].xpath('div[2]/div/div/strong/text()')[0]
        #print("price:%s" % (price))
        sell = infos[0].xpath('div[2]/div/div[@class="deal-cnt"]/text()')[0]
        #print("sell:%s" % (sell))
        shop = infos[0].xpath('div[2]/div[3]/div[1]/a/span[2]/text()')[0]
        #print("shop:%s" % (shop))
        address = infos[0].xpath('div[2]/div[3]/div[2]/text()')[0]
        #print("address:%s" % (address))
        commodity = {
            'goods_url':goods_url,
            'goods':goods,
            'price': price,
            'sell': sell,
            'shop': shop,
            'address': address,
        }
        taobao.insert_one(commodity)
        if page<=100:
            NextPage(url,page)
        else:
            pass

def NextPage(url,page):
    driver.get(url)
    driver.implicitly_wait(10)
    driver.find_element_by_xpath('//a[@trace="srp_bottom_pagedown"]').click()
    time.sleep(4)
    driver.get(driver.current_url)
    driver.implicitly_wait(10)
    get_info(driver.current_url,page)

if __name__=="__main__":
    page=1
    url = 'https://www.taobao.com'
    driver.get(url)
    driver.implicitly_wait(10)
    driver.find_element_by_id('q').clear()
    driver.find_element_by_id('q').send_keys('口红')
    driver.find_element_by_class_name('btn-search').click()
    get_info(driver.current_url,page)

部分结果截图如下:

 

### 回答1: 为了爬取网页上的号码数据,你可以使用 Python 库如 BeautifulSoup 和 Requests。 首先,你需要通过 Requests 库发送一个 HTTP 请求到该网页,并将响应内容存储到一个变量中: ``` import requests url = "http://www.tiaolianghao0755.com" response = requests.get(url) html_content = response.text ``` 接下来,你可以使用 BeautifulSoup 解析 HTML 内容: ``` from bs4 import BeautifulSoup soup = BeautifulSoup(html_content, "html.parser") ``` 最后,你可以使用 BeautifulSoup 查找页面上的号码数据,并存储到一个列表或字典中: ``` numbers = [] for item in soup.find_all("div", class_="number-item"): numbers.append(item.text) ``` 现在,你可以使用这些号码数据进行进一步的操作,比如将它们写入文件或使用 Pandas 库进行数据分析。 请注意,在爬取网页数据时,请遵守网站的爬取政策,避免对网站造成过多的压力。 ### 回答2: 使用Python爬取网页数据可以使用第三方库requests和BeautifulSoup。 首先,你需要导入这两个库。然后,使用requests库发送HTTP请求,下载网页的HTML内容。使用如下代码: ```python import requests from bs4 import BeautifulSoup url = "http://www.tiaolianghao0755.com" response = requests.get(url) html_content = response.text ``` 接下来,你需要使用BeautifulSoup解析HTML内容,提取出需要的数据。可以使用BeautifulSoup的find_all方法来找到所有的号码数据,然后再逐个提取出来。例如,如果号码数据是包含在class为"phone"的元素中,可以使用如下代码: ```python soup = BeautifulSoup(html_content, 'html.parser') phone_data = soup.find_all(class_="phone") for phone in phone_data: # 提取号码数据进行处理 print(phone.text) ``` 以上代码将打印出每个号码数据。你可以根据实际情况进行进一步处理和保存。 最后,不要忘记添加异常处理和合适的延时,以防止网站屏蔽爬虫或者过快访问导致的问题。 ### 回答3: 为了用Python爬取http://www.tiaolianghao0755.com的号码数据,我们可以使用Python中的requests库和BeautifulSoup库。 首先,我们需要使用requests库发送一个GET请求来获取该网页的HTML内容。然后,我们可以使用BeautifulSoup库来解析HTML内容并提取所需的号码数据。 示例代码如下: import requests from bs4 import BeautifulSoup # 发送GET请求获取网页内容 response = requests.get("http://www.tiaolianghao0755.com") # 使用BeautifulSoup解析HTML内容 soup = BeautifulSoup(response.content, "html.parser") # 找到存储号码数据的HTML元素 number_div = soup.find("div", class_="number") # 提取号码数据 numbers = number_div.find_all("span") # 打印号码数据 for number in numbers: print(number.text) 以上代码首先使用requests库发送GET请求来获取网页内容,并将返回的内容存储在response变量中。然后,使用BeautifulSoup库将response中的HTML内容通过"html.parser"解析器解析为一个BeautifulSoup对象。 接下来,我们通过调用find方法和传递class参数来找到存储号码数据的div元素,并将其存储在number_div变量中。然后,使用find_all方法和传递"span"参数来找到所有存储在span元素中的号码数据,并将其存储在numbers变量中。 最后,我们使用一个循环遍历所有的号码数据,并打印出来。 请注意,这只是一个简单的示例,具体的解析方式和提取方法可能因网页的结构不同而有所不同。因此,在实际情况中,您可能需要根据具体情况进行适当的修改和调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值