虎嗅爬虫案例以及优化
业务需求
基本情况说明
- 网站地址:https://www.huxiu.com/
- 网站类型:新闻(自媒体)通过高质量的文章或者新闻获取更多的用户,从构建商业模式
- 爬虫爬取的范围:爬取首页(包含详情页的连接)、爬取新闻的详情页、
基本思路分析
-
- 模拟浏览器向首页发送请求
-
- 解析响应回来的html
-
- 根据标签属性获取新闻详情页的url封装到list集合中
-
- 遍历URL模拟浏览器发送请求
-
- 解析响应回来的文本内容包括 作者,标题 ,时间 ,收藏 ,评论,内容,点赞,来源,url地址
-
- 封装bean对象,用mybatis封装到数据库
问题
1. 无法获取分页数据,点击更多
2. 不同新闻详情页面的数据标签不一致造成indexoutofException问题
问题一 解决
通过解析首页,得到首页包含的新闻的列表信息
为了获取完整的信息,我们需要自动操作分页按钮。
分页请求的url:
https://www.huxiu.com/v2_action/article_list
- 分页提交的header
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8
Connection:keep-alive
Content-Length:80
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:SERVERID=6d35b07e250aadfe8b4fbf72aeadecb9|1504659560|1504658827
Host:www.huxiu.com
Origin:https://www.huxiu.com
Referer:https://www.huxiu.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36
X-Requested-With:XMLHttpRequest
分页POST提交的参数
- huxiu_hash_code:353a9683918c807f5f783dc1df116fad
用来标识当前用户(浏览器) - page:2—–total_page
当前的分页编码 - last_dateline:1504534200
时间
- huxiu_hash_code:353a9683918c807f5f783dc1df116fad
分页请求的返回值
result: 1, msg: "获取成功",…}
data:"<div>这里是数据</div>"
last_dateline:"1504321620"
msg:"获取成功"
result:1
total_page:1585
问题二 判断标签属性就可以了
依赖包添加
<dependencies>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.3</version>
</dependency>
<!-- jsoup HTML parser library @ https://jsoup.org/ -->
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>1.10.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.41</version>
</dependency>
<!-- mybatis的依赖包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.7</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- maven的编译插件,用于指定我们jdk的版本 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
代码下载
链接:http://pan.baidu.com/s/1o82v378 密码:m89a