工具:python3

核心知识点:

1)lxml包不能用pip下载,因为里面有其他语言编写的文件

2)urlopen返回的请求是html文件,要使用 content = etree.HTML(html)来将其转换为xml

3)使用content.xpath()返回一个匹配成功的列表集合

4)构造新的url,进入这个url,进行数据爬取

问题:在执行loadPage时遇到了问题,

link_list = content.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
这个正则表达式在xpath helper中能够找到对应的href值,如图:

但是在在执行程序时 link_list = content.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href') 返回的列表值为空,如图:

尝试进入两个输出的fullurl均能正确进入网页,说明上一步传入的网址是没有错误的呀!

到底是什么原因呢?

import urllib.request
import re
from lxml import etree class Spider:
def __init__(self):
self.headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36",
} def loadPage(self, link):
"""
下载页面
"""
print("正在下载数据。。。。。。") request = urllib.request.Request(link, headers=self.headers)
html = urllib.request.urlopen(request).read()
# html = html.decode("utf-8") with open("meinvba.txt", "w") as f:
f.write(str(html)) # 获取每页的HTML源码字符串
# html = html.decode("gbk") # 解析html文档为HTML DOM类型
content = etree.HTML(html)
print(content)
# 返回所有匹配成功的列表集合
link_list = content.xpath('//div[@class="t_con cleafix"]/div/div/div/a/@href')
print(link_list)
for i in link_list:
print("__4__")
fulllink = "http://tieba.baidu.com" + i
self.loadImage(fulllink)
print("___3___") # 取出每个帖子的图片链接
def loadImage(self, link):
request = urllib.request.Request(link, headers=self.headers)
html = urllib.request.urlopen(request).read()
content = etree.HTML(html)
link_list = content.xpath('//img[@class="BDE_Image"]/@src')
print("____1____")
for link in link_list:
self.writeImage(link) def writeImage(self, link):
request = urllib.request.Request(link, headers=self.headers)
image = urllib.request.urlopen(request).read()
filename = link[-5:]
print("___2____")
with open(filename, "wb") as f:
f.write(image)
print("*"*30) def startWork(self, kw, beginpage, endpage):
"""
控制爬虫运行 """
url = "http://tieba.baidu.com/f?"
key = urllib.parse.urlencode({"kw": kw})
print("key:" + key)
fullurl = url + key
for page in range(int(beginpage), int(endpage) + 1):
pn = (page - 1)*50
fullurl = fullurl + "&pn=" + str(pn) self.loadPage(fullurl)
# print("fullurl:" + fullurl) if __name__ == "__main__":
tiebaSpider = Spider()
kw = input("请输入要爬取的贴吧名:")
beginpage = input("请输入起始页:")
endpage = input("请输入结束页:") tiebaSpider.startWork(kw, beginpage, endpage)

好想知道哪里出了错误啊!!!

*******************************************************************更新*************************************************************************************

我找到了原因!各种尝试之后我发现将loadPage方法中的

request = urllib.request.Request(link,headers=self.headers)改为
request = urllib.request.Request(link)就好了!
很奇怪啊,后来我尝试修改user-agent的值,也是同样的结果:只有loadPage方法的request请求没有headers时才能正常使用。

爬虫(Xpath)——爬tieba.baidu.com的更多相关文章

  1. python爬虫案例:使用XPath爬网页图片

    用XPath来做一个简单的爬虫,尝试爬取某个贴吧里的所有帖子,并且将该这个帖子里每个楼层发布的图片下载到本地. # -*- coding:utf-8 -*- import urllib import ...

  2. Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)

    这道题是一道爬虫练习题,需要爬链接http://tieba.baidu.com/p/2166231880里的所有妹子图片,点进链接看一下,这位妹子是日本著名性感女演员--杉本由美,^_^好漂亮啊,赶紧 ...

  3. 爬虫系列4:Requests+Xpath 爬取动态数据

    爬虫系列4:Requests+Xpath 爬取动态数据 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参 ...

  4. 爬虫系列2:Requests+Xpath 爬取租房网站信息

    Requests+Xpath 爬取租房网站信息 [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]:参考前文 ...

  5. 爬虫系列1:Requests+Xpath 爬取豆瓣电影TOP

    爬虫1:Requests+Xpath 爬取豆瓣电影TOP [抓取]:参考前文 爬虫系列1:https://www.cnblogs.com/yizhiamumu/p/9451093.html [分页]: ...

  6. 爬虫系列(十) 用requests和xpath爬取豆瓣电影

    这篇文章我们将使用 requests 和 xpath 爬取豆瓣电影 Top250,下面先贴上最终的效果图: 1.网页分析 (1)分析 URL 规律 我们首先使用 Chrome 浏览器打开 豆瓣电影 T ...

  7. 爬虫系列(十一) 用requests和xpath爬取豆瓣电影评论

    这篇文章,我们继续利用 requests 和 xpath 爬取豆瓣电影的短评,下面还是先贴上效果图: 1.网页分析 (1)翻页 我们还是使用 Chrome 浏览器打开豆瓣电影中某一部电影的评论进行分析 ...

  8. python网络爬虫之解析网页的XPath(爬取Path职位信息)[三]

    目录 前言 XPath的使用方法 XPath爬取数据 后言 @(目录) 前言 本章同样是解析网页,不过使用的解析技术为XPath. 相对于之前的BeautifulSoup,我感觉还行,也是一个比较常用 ...

  9. Python实战项目网络爬虫 之 爬取小说吧小说正文

    本次实战项目适合,有一定Python语法知识的小白学员.本人也是根据一些网上的资料,自己摸索编写的内容.有不明白的童鞋,欢迎提问. 目的:爬取百度小说吧中的原创小说<猎奇师>部分小说内容 ...

随机推荐

  1. C++ 精确计时类

    http://hi.baidu.com/ronyo/blog/item/ee7e71cf7d46c338f8dc61ad .html    在一些程序中经常要统计一个算法/函数花费的时间,每次都重新写 ...

  2. VC6.0实用小技巧

    VC6.0的若干实用小技巧 .检测程序中的括号是否匹配 把光标移动到需要检测的括号(如大括号{}.方括号[].圆括号()和尖括号<>)前面,键入快捷键 “Ctrl+]”.如果括号匹配正确, ...

  3. MySQL多个条件以什么表当做主条件表_20161111周五

    前两天有事情 停了2天 数据需求:1.活动日期11.8-11.10订单2.单笔订单购买A类产品 B类产品满足68元.且连续3天下单的用户ID 首先第一个条件很简单,主要是第二个条件 第二个条件是 且 ...

  4. apache之访问本地文件,绑定域名

    1.打开文件 C:\Windows\System32\drivers\etc\hosts,在文件末尾加上下面代码: 127.0.0.1 www.wangdongxue.com 2.打开Apache的配 ...

  5. CSS 浏览器兼容

    1.  兼容 IF <!--[if lte IE 7]> <style type="text/css"> .menu { position:relative ...

  6. SQL 优化总结(一)

    查询速度慢的原因 查询速度慢原因很多,常见如下几种: 1.没有索引或者没有用到索引(这是查询慢最常见的问题,是程序设计的缺陷) 2.I/O吞吐量小,形成了瓶颈效应. 3.没有创建计算列导致查询不优化. ...

  7. POJ1330(LCA入门题)

    Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 23388   Accept ...

  8. Mysql多列索引经典案例

    一个经典的多列索引案例,如题: 假设某个表有一个联合索引(c1,c2,c3,c4)一下--只能使用该联合索引的 c1,c2,c3 部分 Awhere c1=x and c2=x and c4>x ...

  9. LeetCode: 389 Find the Difference(easy)

    题目: Given two strings s and t which consist of only lowercase letters. String t is generated by rand ...

  10. JAVA企业级开发-sql入门(07)

    一. 数据库 什么是数据库? 就是一个文件系统,通过标准SQL语言操作文件系统中数据 ---- 用来存放软件系统的数据 我们今天学习的数据库是mysql.关系型数据库. 什么是关系化数据库 ? 保存关 ...