使用Java Jsoup进行Webscrapping而不是在服务器上提取数据

时间:2016-07-07 21:12:48

标签: java jsoup

我正在使用jsoup使用带有java的webscrappers,我遇到了其中一个问题,因为当剪贴板在服务器上运行时,网站上的数据没有被提取,但它确实可以在本地PC上运行。

我尝试使用代理来检查服务器的域是否被禁止从我正在废弃的网站上但这不是问题。

对我来说更令人困惑的是,网页扫描程序从网站中提取数据而不是特定类型的数据(例如,我正在废弃一个可以预订酒店的网站,我可以从用户那里提取评论,他们给那家酒店等的加权,但不是那天酒店的价格)

我已经检查过了:

  • 网站上的html / css没有改变
  • 我的服务器响应200
  • 当我在本地测试程序但不在服务器中测试时,酒店的价格会被提取
  • 我每次都使用不同的用户代理

任何曾经做过webscrappers工作的人都知道可能出现什么问题?

1 个答案:

答案 0 :(得分:0)

很可能是酒店的价格或您无法抓取的内容由JavaScript生成

Jsoup 支持JavaScript,它只会让您获得从服务器收到的普通html ,然后才能被JavaScript操纵。

验证这一点的最佳方法是简单地explain select qm1.title from questions_mysql qm1 join questions_mysql qm2 on qm2.qid<qm1.qid where qm1.qid>3333 and qm1.status='O'; +----+-------------+-------+-------+-----------------+---------+---------+------+-------+------------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+-----------------+---------+---------+------+-------+------------------------------------------------+ | 1 | SIMPLE | qm1 | range | PRIMARY,cactus1 | PRIMARY | 4 | NULL | 5441 | Using where | | 1 | SIMPLE | qm2 | ALL | PRIMARY,cactus1 | NULL | NULL | NULL | 10882 | Range checked for each record (index map: 0x3) | +----+-------------+-------+-------+-----------------+---------+---------+------+-------+------------------------------------------------+ explain select b.title from ( select qid,title from questions_mysql where qid>3333 and status='O' ) b join questions_mysql qm2 on qm2.qid<b.qid; +----+-------------+-----------------+-------+-----------------+---------+---------+------+-------+----------------------------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------------+-------+-----------------+---------+---------+------+-------+----------------------------------------------------+ | 1 | PRIMARY | qm2 | index | PRIMARY,cactus1 | cactus1 | 10 | NULL | 10882 | Using index | | 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 5441 | Using where; Using join buffer (Block Nested Loop) | | 2 | DERIVED | questions_mysql | range | PRIMARY,cactus1 | PRIMARY | 4 | NULL | 5441 | Using where | +----+-------------+-----------------+-------+-----------------+---------+---------+------+-------+----------------------------------------------------+ 使用Jsoup收到的html并检查内容。像这样:

print