【selenium】一次爬虫实战

前言

由于我准备出去留学,所以我对一些租房的广告很感兴趣,所以萌生了爬取这个租房网站的想法。

网站介绍与分析

http://www.yeeyi.com/ :貌似是全球最大的,澳洲华人网站,上面有很多的租房信息。
在这里插入图片描述
在这里插入图片描述
上图列表页的解析是比较简单的,bs4+lxml搞定(先抓取所有class=“ptxt” 的div,再慢慢提取列表的文字和网站)
在这里插入图片描述
在这里插入图片描述
上图的详情页也是比较容易解析,先将id=“mytable” 的 table 拿到,再寻找所有的""

解决方案

这个网站爬取的难度有点高,因为它有一个反爬虫的机制在里面。如果用requests库直接访问网站的话。你会抓取到下面这个界面,而不是主站。然后我在网上查了各种解决方案,最终选择了我们今天的主角——selenium

万恶的。。。
安装selenium库和webdriver的过程我就不表了。

我们直接开始:

  1. 这里我使用了无头的浏览器,也就是没有界面的浏览器。据说,效率会变高一点,无须花费时间进行页面渲染的。
  2. 然后就是指定chromedriver.exe的位置,和插入设置。
  3. time.sleep(5)这个很关键,因为它过五秒后才会跳转到主站,之前都会停留在上图这个界面。
  4. openIndex(b,b.page_source)这个是我写的一个函数。
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
posC="C:\Download\small App\WebDriver\chromedriver.exe"
b = webdriver.Chrome(posC)
b = webdriver.Chrome(options=chrome_options)
url = "http://www.yeeyi.com/forum/index.php?app=forum&act=display&fid=142&rcity1=1&rhousetype1=1&rents1=4"
b.get(url)
time.sleep(5)
openIndex(b,b.page_source)

这样我们就已经得到了我们想要的那个主站(列表页)的源码(b.page_source),由于我还要。进入。详情页,所以我们在列表页需要提取详情页的url们还有它们的标题

  1. 第一个注释的地方我想说明的是,写解析代码的时候,我们可以先下载一个网页html(Ctrl+S)来用,然后就不用每一次运行都要访问一次网站。
  2. soup对象的find_all方法是返回一个List,里面装着所有符合条件的子节点,参数是(标签名,各种属性…),所以websites是一个List,里面全是 class_=‘ptxt’(不要写成class=‘ptxt’)的div节点
    在这里插入图片描述
  3. find方法就是返回第一个符合条件的子节点,参数跟find_all方法差不多
  4. 有(‘span’, class_=‘pin’)的节点在网站上是广告,所以我将它过滤掉。
  5. wb_a是a标签的节点,我们用[]来访问标签里的属性(‘href’,‘class’…)。EX:wb_a[‘href’],getText()方法是获取标签里面的内容
  6. 获取到详情页的url后,我们进入详情页,继续进行信息的提取,如此循环。
  7. 有时候它的函数是不会有代码补全提示的,别慌~。
  8. 最后我们进入到了对详情页的信息提取函数。
def openIndex(b,page_source):
    # soup = bs4.BeautifulSoup(open('yeeyi.html&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值