python3.4+selenium爬58同城(一)
爬取http://bj.58.com/pbdn/0/pn2/中除转转、推广商品以外的产品信息,因为转转和推广的详情信息不规范,需要另外写一个方法存放,后期补上,详情页如下
这周学习了爬虫,但是遇到一些js,requests方法无法渲染,比如浏览量,所以结合selenium+phantomjs渲染网页,获取信息
上代码,注释中详细解释:
from selenium import webdriver
from bs4 import BeautifulSoup
import re class GetPageInfo(object):
‘这个类主要是定义爬网页的方法,定义一个规范,以后爬取网页方法就重写这个类就行’
def index_page(self):
'获取所有每个网页的url'
‘这周暂时只爬取一页的所有记录详细信息,所以该方法暂时不用’
pass
def detail_page(self):
'从每个index_page中,获取每个网页的每条记录的url'
pass
def domain_page(self):
'从每个detail_page中,获取每条记录的详细信息' class TongChengFirstHomework(GetPageInfo):
#传入一个浏览器
def __init__(self,browser=None):
self.browser= browser #初始化一个浏览器
def detail_page(self,whoshell=0,page=1):
'woshell:0代表个人销售,1代表商家销售;page当前页'
#http://sz.58.com/pbdn/0/pn1/
url= 'http://sz.58.com/pbdn/{}/pn{}/'.format(str(whoshell),str(page))
#此处使用了format函数,详细用法可以找找百度
browser.get(url) #打开网页
html = browser.page_source #获取网页的所有内容
soup = BeautifulSoup(html,'lxml') #用BeautifulSoup解析网页,转回我们平时熟悉的爬虫方法
detail_urls = soup.select('#infolist a.t') #获取某一页下的所有记录
detail_url_list=[]
for row in detail_urls:
detail_url = row.get('href')
if ('Mzhuanzhuan' not in str(detail_url)) and ('jump' not in detail_url):
#获取每一条记录的url
detail_url_list.append(detail_url)
print(detail_url_list)
return detail_url_list def domain_page(self,detail_url):
detail = {} #用来存放详细信息的字典 browser.get(detail_url)
html = browser.page_source
soup = BeautifulSoup(html,'lxml')
desc_product = soup.select('div.col_sub.sumary > ul > li:nth-of-type(2) > div.su_con > span')
detail={
"provice":soup.select('.crb_i > a')[0].get_text(),
"title":soup.select('#content > div.person_add_top.no_ident_top > div.per_ad_left > div.col_sub.mainTitle > h1')[0].get_text(),
"date":soup.select('.time')[0].get_text(),
"views":soup.select('#totalcount')[0].get_text(),
"price":soup.select('span.price.c_f50')[0].get_text(),
"condition":list(desc_product[0].stripped_strings) if '-' not in str(soup.select('div.col_sub.sumary > ul > li:nth-of-type(2) > div.su_con > span')) else None,
"area":list(soup.select('.c_25d')[0].stripped_strings) if soup.find_all('span','c_25d') else None,
#这里是可以直接在字典里使用if函数,类似列表解析式
"seller":soup.select('#divContacter > ul > ul > li > a')[0].get_text(),
}
print(detail)
return detail #返回所有详细信息 try:
cap = webdriver.DesiredCapabilities.PHANTOMJS #DesiredCapabilities是一个字典,可以对浏览器进行设置 cap['phantomjs.page.settings.loadImages']=False #设置浏览器不加载图片
cap['phantomjs.page.settings.userAgent ']="Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36" #设置useragent
cap['phantomjs.page.settings.diskCache'] =True #设置浏览器开启缓存
browser = webdriver.PhantomJS(desired_capabilities=cap) #使用desired_capabilities初始化浏览器
tongcheng=TongChengFirstHomework(browser) #实例一个tongchengfirskhomework对象
for detail_page in tongcheng.detail_page(page=2):
tongcheng.domain_page(detail_page)
print(detail_page) finally:
browser.close() #记得要关掉浏览器
python3.4+selenium爬58同城(一)的更多相关文章
- python3.4+pyspider爬58同城(二)
之前使用python3.4+selenium实现了爬58同城的详细信息,这次用pyspider实现,网上搜了下,目前比较流行的爬虫框架就是pyspider和scrapy,但是scrapy不支持pyth ...
- Python 爬58同城 城市租房信息
爬取完会自动生成csv电子表格文件,含有房价.押付.链接等信息 环境 py2.7 pip install lxml pip install cssselect #coding:utf-8 impo ...
- 使用Python3.x抓取58同城(南京站)的演出票的信息
#!/usr/bin/env python #-*-coding: utf-8 -*- import re import urllib.request as request from bs4 impo ...
- python3爬虫-爬取58同城上所有城市的租房信息
from fake_useragent import UserAgent from lxml import etree import requests, os import time, re, dat ...
- scrapy爬取58同城二手房问题与对策
测试环境: win10,单机爬取,scrapy1.5.0,python3.6.4,mongodb,Robo 3T 其他准备: 代理池:测试环境就没有用搭建的flask抓代理,因为我找到的几个免费网站有 ...
- 用Python写爬虫爬取58同城二手交易数据
爬了14W数据,存入Mongodb,用Charts库展示统计结果,这里展示一个示意 模块1 获取分类url列表 from bs4 import BeautifulSoup import request ...
- 养只爬虫当宠物(Node.js爬虫爬取58同城租房信息)
先上一个源代码吧. https://github.com/answershuto/Rental 欢迎指导交流. 效果图 搭建Node.js环境及启动服务 安装node以及npm,用express模块启 ...
- 利用python爬取58同城简历数据
利用python爬取58同城简历数据 利用python爬取58同城简历数据 最近接到一个工作,需要获取58同城上面的简历信息(http://gz.58.com/qzyewu/).最开始想到是用pyth ...
- Python+Selenium爬取动态加载页面(1)
注: 最近有一小任务,需要收集水质和水雨信息,找了两个网站:国家地表水水质自动监测实时数据发布系统和全国水雨情网.由于这两个网站的数据都是动态加载出来的,所以我用了Selenium来完成我的数据获取. ...
随机推荐
- SVN - 详细文档
1.首先打开Cornerstone 2.然后如下图所示: 3.选择对应的仓库,如下图所示 4.然后Import完成之后,就把本地的文件提交到SVN服务器上了,如下图所示,另外如果你想要使用SVN进行版 ...
- .NET抽象工厂模式微理解--教你在项目中实现抽象工厂
.NET抽象工厂模式微理解--教你在项目中实现抽象工厂 最近在学习MVC,对于MVC里面的一些项目上的东西都和抽象模式有关,今天就微说明一下个人对于抽象工厂模式的理解,以方便学习MVC及工厂模式相关的 ...
- 时刻注意QT与Windows系统的不同(惨痛教训)
其实就一条:WINAPI使用'\',而QT使用'/'.如果程序立刻崩溃的话,是很难看出端倪的,所以要时刻注意...
- 【温故而知新:文件操作】C#的文件读写相关
StreamReader类以及其方法ReadLine,Read,ReadToEnd的分析 首先StreamReader类的构造参数非常丰富在这里,我觉得最常用的就是StreamReader(Strea ...
- eclipse打开文件位置Open Explorer 插件
,OpenExplorer插件可以满足这个功能,可以到https://github.com/samsonw/OpenExplorer/downloads下载最新版本,将jar包放到eclipse的pl ...
- UML--核心视图之用例图
如果说UML是一门语言,那么元素就是UML的基本词汇,视图就是语法. UML通过视图将基本元素组织在一起,形成有意义的句子. 静态视图,顾名思义,就是表达静态事物的.包括用例图.类图和包图. 用例图 ...
- BZOJ 4541 【HNOI2016】 矿区
题目链接:矿区 这道题去年暑假就想写了,但是一直拖拉,以至于现在才来写这道题.以前一直在刻意回避几何类的题目,但到了现在这个时候,已经没有什么好害怕的了. 正巧今天神犇\(xzy\)讲了这道题,那我就 ...
- 五分钟读懂UML类图
平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...
- CSDN 正整数异或值问题
题目详情: http://student.csdn.net/mcs/programming_challenges?page=4 给你n个正整数,请你计算出有多少对数的异或值小于等于k. 输入描写叙述: ...
- Docker image 镜像介绍
操作镜像 使用 docker 命令行操作 docker 镜像 获取镜像 使用「docker pull +镜像名称」从网络上下载image镜像 core@localhost ~ $ docker pul ...