吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|www.mlqcje.live

 找回密碼
 注冊[Register]

QQ登錄

只需一步,快速開始

搜索
查看: 767|回復: 11
上一主題 下一主題

[已解決] 萌新在學python碰到的幾個問題,求大佬。

 關閉 [復制鏈接]
跳轉到指定樓層
樓主
浮云。 發表于 2019-6-23 10:29 回帖獎勵
本帖最后由 浮云。 于 2019-6-25 19:06 編輯

大佬們早上好,最近在學python爬蟲,有兩個問題,一個是數據保存csv表格的時候,報錯AttributeError: '_io.TextIOWrapper' object has no attribute 'writerow'  在另外一臺電腦上是能成功運行的,換了臺電腦就不行了,代碼如下:
[Python] 純文本查看 復制代碼
        with open('movies1.csv','a+',newline='',encoding='utf-8') as movies_file:
            movies_csv = csv.DictWriter(movies_file,fieldnames=header)
            movies_file.writerow(movies_dict)


第二個問題就是編碼問題,輸出的結果中文是這樣的,請問怎么轉換中文。。
[Python] 純文本查看 復制代碼
import requests
from bs4 import BeautifulSoup
from urllib.request import quote
name = input('輸入電影名字')
mov_quote = quote(name.encode('gbk'))
res = requests.get('http://s.ygdy8.com/plus/so.php?typeid=1&keyword='+mov_quote)
soup = BeautifulSoup(res.text,'html.parser')
seach_href = soup.find('td',width='55%')
seach_url =seach_href.find('a')['href']
download = requests.get('http://s.ygdy8.com'+seach_url)
down_soup = BeautifulSoup(download.text,'html.parser')
download_tag = down_soup.find('td',style='WORD-WRAP: break-word')
download_url = download_tag.find('a')['href']
dd = download_url.encode('utf-8')
print(dd)

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

推薦
 樓主| 浮云。 發表于 2019-6-23 10:45 <
luopo 發表于 2019-6-23 10:43
你來個完整代碼也好啊!如果你第一段代碼和第二段代碼是一個文件中的,那么就是編碼問題。

不是的,第一個問題是另外個文件,不是同一個問題,第二個是另外個
第一個代碼:
[Python] 純文本查看 復制代碼
import requests
from bs4 import BeautifulSoup
import csv
movies_dict ={}
header = ['序號','電影名','評分','推薦語','URL']

for i in range(10):
    res = requests.get('https://movie.douban.com/top250?start='+str(i*25)+'&filter=')
    bs_res = BeautifulSoup(res.text,'html.parser')
    num_all = bs_res.find_all('em',class_='')
    title_all = bs_res.find_all('div',class_='hd')
    star_all = bs_res.find_all('span',class_='rating_num')
    tui_all = bs_res.find_all('span',class_='inq')
    url_all = bs_res.find_all('div',class_='pic')
    n =len(title_all)
    a=0
    for b in range(len(title_all)):
        movies_list =[]
        title = title_all[b].find(class_='title')
        #print(num_all[a].text,title.text,star_all[a].text.replace('\n',''),tui_all[a].text,url_all[a].find('a')['href'])
        movies_list = [num_all[a].text,title.text,star_all[a].text,tui_all[a].text,url_all[a].find('a')['href']]
        a += 1
        for e in range(5):
            movies_dict[header[e]] = movies_list[e]

        with open('movies1.csv','a+',newline='',encoding='utf-8') as movies_file:
            movies_csv = csv.DictWriter(movies_file,fieldnames=header)
            movies_file.writerow(movies_dict)
推薦
luopo 發表于 2019-6-23 12:59
本帖最后由 luopo 于 2019-6-23 13:03 編輯

你這個文件的問題應該是寫入的時候出錯了,他writerow需要寫入一行,我總感覺你的for循環有問題,是不是你循環的不是楊文件,而且他需要寫入頭部信息,就是你的序號,電影名等頭部,我覺得你寫的不太對。我不會用bs4.用lxml給你寫了一個簡單的,你可以參考一下
[Python] 純文本查看 復制代碼
import requests
import csv
from lxml import etree
fieldnames = ['電影名','評分']
url = 'https://movie.douban.com/top250'
response = requests.get(url=url)
text = response.content.decode('utf-8')
html = etree.HTML(text)
title_all = html.xpath('//div[@class="hd"]//a//span[1]//text()')   # 全部電影的名字列表
grade_all = html.xpath('//span[@class="rating_num"]//text()')  # 評分
movie_list = []
for x,y in zip(title_all,grade_all):
    movie_list.append({fieldnames[0]:x,fieldnames[1]:y})
with open('movies1.csv','w+') as f:
    cr=csv.DictWriter(f,fieldnames = fieldnames) # 傳遞搖打開的文件名,和表頭信息
    cr.writeheader() #將表頭名稱寫入csv文件
    cr.writerows(movie_list) #將要寫入的數據一次性寫入到文件,也可以使用cr.writerow()一次寫入一行.就要使用for循環了



這個代碼有啥不懂的,可以問我!
而且你這個for循環嵌套太多了。你可以把需要的先變成list或者dict,在去循環,你這一個套一個的。。。
沙發
luopo 發表于 2019-6-23 10:43
你來個完整代碼也好啊!如果你第一段代碼和第二段代碼是一個文件中的,那么就是編碼問題。
4#
不懂破解 發表于 2019-6-23 10:59
在代碼文件開頭處添加這一行試試:#coding:utf-8
5#
rxxcy 發表于 2019-6-23 11:01
編碼問題, 你這個開頭有點像  “大家好,我是XXX,今天給大家帶來的是xxx”
6#
a515727574 發表于 2019-6-23 11:11
第一個問題,查看腳本文件名,不要和庫名還有方法名一樣
第二個問題,用 for i in name:print(name[i])試一下
7#
a515727574 發表于 2019-6-23 11:16
a515727574 發表于 2019-6-23 11:11
第一個問題,查看腳本文件名,不要和庫名還有方法名一樣
第二個問題,用 for i in name:print(name)試一下

發錯了
for i in name:
     print i
8#
lijt16 發表于 2019-6-23 11:23
兩處錯誤

snipaste_20190623_112238.jpg (40.25 KB, 下載次數: 1)

snipaste_20190623_112238.jpg
10#
zheshen 發表于 2019-6-23 13:32
第二:編碼或者解碼試試
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:禁止回復非技術或與主題無關水貼,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( 京ICP備16042023號 | 京公網安備 11010502030087號 )

GMT+8, 2019-8-12 09:30

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回復 返回頂部 返回列表
内蒙古11选5开奖查询百度