python爬虫实战(一)----------爬取京东商品信息

本文章的例子仅用于学习之用,如涉及版权隐私信息,请联系本人删除,谢谢。

最近一直在练习使用python爬取不同网站的信息,最终目的是实现一个分布式的网络爬虫框架,可以灵活适用不同的爬取需求。

项目github地址:

https://github.com/happyAnger6/anger6Spider

在学习的过程中遇到不少问题,在这里做一下总结,并分享出来,希望有兴趣的朋友批评指正,共同学习共同进步。

本着实用至上的目的,不准备过多讲实现细节和原理,直接通过项目需求来边实战边学习,因此本系列文章以解决问题为主。

本项目用到大量开源软件或框架,每节的例子开始部分会说明依懒于哪些开源库。python版本为3.4.0

依懒:

pip3 install tornado

pip3 install bs4

pip3 install selenium

phantomjs:一个无头浏览器,不是python包,而是一个软件,需要安装。

tornado:著名的web框架,使用它的目的主要是其对协程的良好支持以及异步http库,可以在单线程环境中充分提高性能。

bs4:beautifulsoup主要用于分析html页面,其强大功能不必多说。

selenium:本来是一个web自动测试化框架,由于其对多浏览器的支持,可以方便地处理页面中javascript等问题。

phantomjs:用来充当一个浏览器,用来解析javascript,实现动态点击页面等功能。

代码注释比较详细,不多说废话,直接上代码:

from bs4 import BeautifulSoup

from tornado.httpclient import AsyncHTTPClient
from tornado import gen
from tornado.ioloop import IOLoop

from selenium import webdriver
import re

url = "http://search.jd.com/Search?keyword=Python&enc=utf-8&book=y&wq=Python&pvid=33xo9lni.p4a1qb"

def parse_info_from_soup(bs):
    items = bs.find_all("li",class_="gl-item")   #查找所有class为"gl-item",标签名为li的标签
    for item in items: #遍历所有标签
        name = item.find("div",class_="p-name").find("em") #查找class为"p-name",标签名为div的标签,并查找em内容
        price = item.find("div",class_="p-price").find("i") #查找价格
        book_detail = item.find("span",class_="p-bi-store").find("a") #查找出版社
        commit = item.find("div",class_="p-commit").find("a") #查找评论人数
        print(name.text,book_detail.text,price.text,commit.text)
    print(len(items))

@gen.coroutine
def main():
    cli = AsyncHTTPClient()
    response = yield cli.fetch(url) #用tornado的AsyncHTTPClient来下载页面
    bs = BeautifulSoup(response.body) #将页面信息转换为BeautifulSoup对象
    print(bs)
    parse_info_from_soup(bs) #从页面中提取信息

def main1():
    driver = webdriver.PhantomJS(executable_path="/usr/bin/phantomjs")
    driver.get(url)  #通过无头浏览器PhantomJS下载页面
    bs = BeautifulSoup(driver.page_source)  #将页面信息转换为BeautifulSoup对象
    parse_info_from_soup(bs) #从页面中提取信息

if __name__ == "__main__":
    IOLoop.instance().run_sync(main1)

直得注意的地方为main和main12个函数,分别运行可以看到得到的结果完全不同。

因为不使用PhantomJS的话,由于javascript的关系,页面无法完全加载,因此数据解析不出来。这也说明我们要针对不同的网站,采取不同的加载策略。

对于需要js动态加载的页面,我们需要使用PhantomJS;其它静态加载完成的可以使用AsyncHTTPClient。

时间: 2024-08-24 04:44:32

python爬虫实战(一)----------爬取京东商品信息的相关文章

python爬虫实战,多线程爬取京东jd html页面:无需登录的网站的爬虫实战

[前言] # 本脚本用来爬取jd的页面:http://list.jd.com/list.html?cat=737,794,870到 # ......http://list.jd.com/list.html?cat=737,794,870&page=11&JL=6_0_0的所有html的内容和图片. # 本脚本仅用于技术交流,请勿用于其他用途 # by River # qq : 179621252 # Date : 2014-12-02 19:00:00 [需求说明] 以京东为示例,爬取页面

python爬虫实践——爬取京东商品信息

1 ''' 2 爬取京东商品信息: 3 请求url: 4 https://www.jd.com/ 5 提取商品信息: 6 1.商品详情页 7 2.商品名称 8 3.商品价格 9 4.评价人数 10 5.商品商家 11 ''' 12 from selenium import webdriver 13 from selenium.webdriver.common.keys import Keys 14 import time 15 16 17 def get_good(driver): 18 try

python爬虫:爬取京东商品信息

''' 初级版 ''' import time from selenium import webdriver from selenium.webdriver.common.keys import Keys driver = webdriver.Chrome(r'C:\Users\Auraro\Desktop/chromedriver.exe') num = 1 try: driver.implicitly_wait(10) driver.get('https://www.jd.com/') in

爬取京东商品信息和评价的爬虫实现源码

话不多说,直接上源码: var keyword = "d3.js";//@input(keyword, 查询关键字, 爬取该关键字搜索出来的京东商品) var comment_count = 100;//@input(comment_count, 爬取的评论数, 最多爬取多少条评论) var page_count = comment_count / 10; keyword = keyword.trim(); var scanUrls = []; scanUrls.push("

Python爬虫实战:爬取腾讯视频的评论

前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 易某某 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef 一.前提条件 安装了Fiddler了(用于抓包分析) 谷歌或火狐浏览器 如果是谷歌浏览器,还需要给谷歌浏览器安装一个SwitchyOmega插件,用于

Java爬虫爬取京东商品信息

<strong> java<em style="color:red;">爬虫</em></strong>工具:Jsoup Maven地址 <dependency> <!-- jsoup HTML parser library @ https://jsoup.org/ --> <groupId>org.jsoup</groupId> <artifactId>jsoup</ar

芝麻HTTP:Python爬虫实战之爬取糗事百科段子

首先,糗事百科大家都听说过吧?糗友们发的搞笑的段子一抓一大把,这次我们尝试一下用爬虫把他们抓取下来. 友情提示 糗事百科在前一段时间进行了改版,导致之前的代码没法用了,会导致无法输出和CPU占用过高的情况,是因为正则表达式没有匹配到的缘故. 现在,博主已经对程序进行了重新修改,代码亲测可用,包括截图和说明,之前一直在忙所以没有及时更新,望大家海涵! 更新时间:2015/8/2 糗事百科又又又又改版了,博主已经没心再去一次次匹配它了,如果大家遇到长时间运行不出结果也不报错的情况,请大家参考最新的评

python 爬虫实战4 爬取淘宝MM照片

本篇目标 抓取淘宝MM的姓名,头像,年龄 抓取每一个MM的资料简介以及写真图片 把每一个MM的写真图片按照文件夹保存到本地 熟悉文件保存的过程 1.URL的格式 在这里我们用到的URL是 http://mm.taobao.com/json/request_top_list.htm?page=1,问号前面是基地址,后面的参数page是代表第几页,可以随意更换地址.点击开之后,会发现有一些淘宝MM的简介,并附有超链接链接到个人详情页面. 我们需要抓取本页面的头像地址,MM姓名,MM年龄,MM居住地,

芝麻HTTP:Python爬虫实战之爬取百度贴吧帖子

本篇目标 1.对百度贴吧的任意帖子进行抓取 2.指定是否只抓取楼主发帖内容 3.将抓取到的内容分析并保存到文件 1.URL格式的确定 首先,我们先观察一下百度贴吧的任意一个帖子. 比如:http://tieba.baidu.com/p/3138733512?see_lz=1&pn=1 ? http:// 代表资源传输使用http协议 tieba.baidu.com 是百度的二级域名,指向百度贴吧的服务器. /p/3138733512 是服务器某个资源,即这个帖子的地址定位符 see_lz和pn是