齐紫荆。 发表于 2020-4-1 16:54:13

爬虫问题

本帖最后由 齐紫荆。 于 2020-4-1 17:30 编辑

如图,为啥爬出来的tr是个空的啊

qiuyouzhi 发表于 2020-4-1 16:56:09

确定几个东西:
1,URL没错?
2,不加headers能爬?
3,soup.find确定找到东西了?

wp231957 发表于 2020-4-1 17:06:14

没有这个 页面啊   你是从哪里跳转过去的

齐紫荆。 发表于 2020-4-1 17:28:33

qiuyouzhi 发表于 2020-4-1 16:56
确定几个东西:
1,URL没错?
2,不加headers能爬?


页面没错啊,我用r.status_code返回是200,应该是对的,table = soup.find('table')也有东西啊

qiuyouzhi 发表于 2020-4-1 17:31:40

齐紫荆。 发表于 2020-4-1 17:28
页面没错啊,我用r.status_code返回是200,应该是对的,table = soup.find('table')也有东西啊

那你确定<table>有子标签,且你的isinstance参数拼写正确?
那个bs4.element.Tag为何点后有空格?
去掉试试

qiuyouzhi 发表于 2020-4-1 17:33:18

齐紫荆。 发表于 2020-4-1 17:28
页面没错啊,我用r.status_code返回是200,应该是对的,table = soup.find('table')也有东西啊

顺便你把find后面加个参数:
class_="wikitable"
我怀疑你的find找到第一个table后,里面没有子标签

齐紫荆。 发表于 2020-4-1 17:34:33

qiuyouzhi 发表于 2020-4-1 17:31
那你确定有子标签,且你的isinstance参数拼写正确?
那个bs4.element.Tag为何点后有空格?
去掉试试

大佬你看我补的那个图,那个tr应该是table的子标签吧

qiuyouzhi 发表于 2020-4-1 17:35:30

齐紫荆。 发表于 2020-4-1 17:34
大佬你看我补的那个图,那个tr应该是table的子标签吧

我又回复你了,看下6楼

齐紫荆。 发表于 2020-4-1 17:44:30

qiuyouzhi 发表于 2020-4-1 17:35
我又回复你了,看下6楼

>>> table = soup.find('table',class_="wikitable").children
>>> for tr in table:
        if isinstance(tr,bs4.element.Tag):
                th = tr('th')

               
>>> th
[]
这样吗还是空的啊

qiuyouzhi 发表于 2020-4-1 17:54:15

齐紫荆。 发表于 2020-4-1 17:44
>>> table = soup.find('table',class_="wikitable").children
>>> for tr in table:
        if isinstance(t ...

给你调试了一下,正确方法是酱紫的:
>>> for each in list(table):
        print(each.string)

qiuyouzhi 发表于 2020-4-1 17:59:34

本帖最后由 qiuyouzhi 于 2020-4-1 18:01 编辑

齐紫荆。 发表于 2020-4-1 17:44
>>> table = soup.find('table',class_="wikitable").children
>>> for tr in table:
        if isinstance(t ...

顺便给你包装了一下:
from requests import get
from bs4 import BeautifulSoup as BS

def open_url(url):
    # 可以加headers
    res = get(url)
    return res

def get_Info(res):
    soup = BS(res.text, "html.parser")
    table = soup.find('table').children
    i = 0 # 它用于判断何时该换行
    for tr in list(table):
      if i == 2:
            print()
            i = 0
      print(tr.string.strip(), end = '') # strip()删除空格
      i += 1
      

def main():
    url = "https://yanyu.huijiwiki.com/wiki/伙伴成长以及加点属性排行一览"
    get_Info(open_url(url))

if __name__ == "__main__":
    main()

齐紫荆。 发表于 2020-4-1 18:00:34

qiuyouzhi 发表于 2020-4-1 17:54
给你调试了一下,正确方法是酱紫的:

大佬这个只能输出第一排,怎么输出整个表啊

qiuyouzhi 发表于 2020-4-1 18:01:23

齐紫荆。 发表于 2020-4-1 18:00
大佬这个只能输出第一排,怎么输出整个表啊

我给你包装了一下,详情看11楼
我这里测试是没有问题的

齐紫荆。 发表于 2020-4-1 18:05:01

qiuyouzhi 发表于 2020-4-1 17:59
顺便给你包装了一下:

感谢大佬
页: [1]
查看完整版本: 爬虫问题