虎嗅案例--爬虫

虎嗅爬虫案例以及优化

业务需求

基本情况说明
  • 网站地址:https://www.huxiu.com/
  • 网站类型:新闻(自媒体)通过高质量的文章或者新闻获取更多的用户,从构建商业模式
  • 爬虫爬取的范围:爬取首页(包含详情页的连接)、爬取新闻的详情页、
基本思路分析
    1. 模拟浏览器向首页发送请求
    1. 解析响应回来的html
    1. 根据标签属性获取新闻详情页的url封装到list集合中
    1. 遍历URL模拟浏览器发送请求
    1. 解析响应回来的文本内容包括 作者,标题 ,时间 ,收藏 ,评论,内容,点赞,来源,url地址
    1. 封装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
      时间
  • 分页请求的返回值

    • 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 

优化方式

线程池的方式

消息队列的方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值